// 仪器相关类型定义
import { FileValue } from '@/components/FileUpload';

// 订单类型枚举
export enum OrderType {
  SAMPLE_DELIVERY = '1', // 送样申请
  ENGINEER_OPERATION = '2', // 仪器预约-工程师操作
  SELF_OPERATION = '3', // 仪器预约-自主操作
}

// 仪器状态枚举
export enum InstrumentStatus {
  ONLINE = 1, // 已上线
  OFFLINE = 2, // 已下线
  MAINTENANCE = 3, // 维护中
}

// 收费方式枚举
export enum FeeMethod {
  BY_HOUR = 1, // 按机时
  BY_SAMPLE = 2, // 按样品
}

// 培训收费方式枚举
export enum TrainFeeMethod {
  BY_HOUR = 1, // 按机时
  BY_TIME = 2, // 按次数
}

// 角色类型枚举
export enum RoleType {
  SUPER_ADMIN = 1, // 超级管理员
  ADMIN = 2, // 管理员
  INSTRUMENT_MANAGER = 3, // 仪器负责人
  INSTRUMENT_OPERATOR = 4, // 仪器操作员
  FINANCE = 5, // 财务
  LEVEL_1_USER = 6, // 1级用户
  LEVEL_2_USER = 7, // 2级用户
  LEVEL_3_USER = 8, // 3级用户
}

// 日期类型枚举
export enum DateType {
  CLOSE_ALL_DAY = 1, // 关闭整天
  CUSTOM_TIME_SLOTS = 2, // 自定义时间段
}

// 是否必选枚举
export enum IsRequired {
  NO = 0, // 否
  YES = 1, // 是
}

// 状态枚举
export enum Status {
  NORMAL = 1, // 正常
  DISABLED = 2, // 禁用
}


// 是否工作日枚举
export enum IsWorkday {
  NO = 0, // 否 - 自定义星期
  YES = 1, // 是 - 法定工作日
}

// 星期枚举
export enum Weekday {
  MONDAY = 1, // 周一
  TUESDAY = 2, // 周二
  WEDNESDAY = 3, // 周三
  THURSDAY = 4, // 周四
  FRIDAY = 5, // 周五
  SATURDAY = 6, // 周六
  SUNDAY = 7, // 周日
}




// 时间类型 - 简化为字符串格式 "HH:mm:ss"
export type LocalTime = string;

// 仪器分类响应
export interface CategoryResponse {
  id: number;
  name: string;
  parentId: number;
  hasChildren: boolean;
  children?: CategoryResponse[];
  createTime: string;
  updateTime: string;
  isDeleted: number;
}

// 仪器耗材
export interface InstrumentConsumable {
  id?: number;
  instrumentId?: number;
  name: string;
  price: number;
  unit: string;
  isRequired: IsRequired; // 0:否, 1:是
  status?: Status; // 1:正常, 2:禁用
  createTime?: string;
  updateTime?: string;
  isDeleted?: number;
}

// 仪器增值服务
export interface InstrumentIncrementService {
  id?: number;
  instrumentId?: number;
  name: string;
  price: number;
  unit: string;
  isRequired: IsRequired; // 0:否, 1:是
  status?: Status; // 1:正常, 2:禁用
  createTime?: string;
  updateTime?: string;
  isDeleted?: number;
}

// 仪器排期时间段
export interface InstrumentScheduleTimeslot {
  id?: number;
  scheduleGroupId?: number;
  startTime: LocalTime;
  endTime: LocalTime;
  createTime?: string;
  updateTime?: string;
  isDeleted?: number;
}

// 仪器排期时间组
export interface InstrumentScheduleGroup {
  id?: number;
  instrumentScheduleId?: number;
  isWorkday: IsWorkday; // 0否 1是
  unfixDays: string; // 每周重复，从周一到周日分别为1到7，多个以逗号隔开
  timeslots: InstrumentScheduleTimeslot[];
  createTime?: string;
  updateTime?: string;
  isDeleted?: number;
}

// 仪器排期
export interface InstrumentSchedule {
  id?: number;
  instrumentId?: number;
  roleType: RoleType;
  groups: InstrumentScheduleGroup[];
  createTime?: string;
  updateTime?: string;
  isDeleted?: number;
}

// 仪器排期特定日期时间段
export interface InstrumentScheduleSpecificDateTimeslot {
  id?: number;
  specificDateId?: number;
  startTime: LocalTime;
  endTime: LocalTime;
  createTime?: string;
  updateTime?: string;
  isDeleted?: number;
}

// 仪器排期特定日期
export interface InstrumentScheduleSpecificDate {
  id?: number;
  instrumentId?: number;
  roleType: RoleType;
  specificDate: string;
  dateType: DateType; // 1:关闭整天 2:自定义时间段
  timeslots: InstrumentScheduleSpecificDateTimeslot[];
  createTime?: string;
  updateTime?: string;
  isDeleted?: number;
}

// 创建仪器请求
export interface InstrumentCreateRequest {
  name: string; // 仪器名称
  model: string; // 型号
  categoryId: number; // 仪器分类ID
  description: string; // 一句话介绍
  introduction: string; // 仪器简介
  detailIntroduction: string; // 详细介绍
  picImg: string | FileValue; // 展示图片 fileKey 或 FileValue 对象
  qrCodeImg: string | FileValue; // 专业咨询二维码图片 fileKey 或 FileValue 对象
  curatorImg: string | FileValue; // 负责人图片 fileKey 或 FileValue 对象
  curatorIntroduction: string; // 负责人介绍
  curatorUserIds: number[]; // 负责人用户ID列表
  operatorUserIds: number[]; // 操作员用户ID列表
  orderTypes: OrderType; // 可选订单类型 1 送样申请 2 仪器预约-工程师操作 3 仪器预约-自主操作
  deliveryTime?: string; // 送样申请预计交付时间
  feeMethod: FeeMethod; // 仪器收费方式
  feeUnit: number; // 仪器计费单位 单位分钟
  price: number; // 单价
  trainFeeMethod?: TrainFeeMethod; // 培训收费方式
  trainFeeUnit?: number; // 培训计费单位 单位分钟
  trainFee?: number; // 培训费用
  leadTime: number; // 预约提前时间 单位小时
  minDuration: number; // 最小预约时长 单位分钟
  consumables: InstrumentConsumable[]; // 耗材集合
  incrementServices: InstrumentIncrementService[]; // 增值服务集合
  // 邮寄地址信息
  provinceCode: string; // 省代码
  cityCode: string; // 市代码
  districtCode: string; // 区代码
  address: string; // 详细地址
  consignee: string; // 收货姓名
  phone: string; // 收货电话
  appointForm: string; // 预约申请单
  instrumentSchedules: InstrumentSchedule[]; // 仪器排期集合
  instrumentScheduleSpecificDates: InstrumentScheduleSpecificDate[]; // 仪器排期特定日期集合
}

// 仪器信息
export interface InstrumentInfo extends InstrumentCreateRequest {
  id: number;
  name: string;
  model: string;
  categoryId: number;
  categoryName?: string;
  status: InstrumentStatus;
  description: string;
  introduction: string;
  detailIntroduction: string;
  picImg: string;
  picImgUrl?: string; // 图片的完整URL
  qrCodeImg: string;
  qrCodeImgUrl?: string; // 二维码图片的完整URL
  curatorImg: string;
  curatorImgUrl?: string; // 负责人图片的完整URL
  curatorIntroduction: string;
  curatorUserIds: number[];
  operatorUserIds: number[];
  orderTypes: OrderType;
  deliveryTime?: string;
  feeMethod: FeeMethod;
  feeUnit: number;
  price: number;
  trainFeeMethod?: TrainFeeMethod;
  trainFeeUnit?: number;
  trainFee?: number;
  leadTime: number;
  minDuration: number;
  provinceCode: string;
  cityCode: string;
  districtCode: string;
  address: string;
  consignee: string;
  phone: string;
  appointForm: string;
  createTime: string;
  updateTime: string;
}

// 仪器表单（用于编辑）
export interface InstrumentForm extends Omit<InstrumentCreateRequest, 'id'> {
  id?: number;
  status?: InstrumentStatus;
}

// 仪器列表查询参数
export interface InstrumentQueryParams {
  ascs?: string,
  categoryId?: number,
  categoryIds?: number[],
  curatorUserId?: number,
  current?: number,
  descs?: string,
  endDate?: string,
  ids?: number[],
  name?: string,
  searchKey?: string,
  size?: number,
  startDate?: string,
  status?: InstrumentStatus
}

// 仪器列表项
export interface InstrumentListItem {
  id: number;
  name: string;
  model: string;
  categoryName: string;
  status: InstrumentStatus;
  curatorNames: string[]; // 负责人姓名列表
  createTime: string;
  updateTime: string;
}

// 仪器培训名单用户
export interface InstrumentTrainingUser {
  id: number;
  userId: number;
  userName: string;
  userPhone: string;
  instrumentId: number;
  createTime: string;
}

// 仪器培训名单查询参数
export interface InstrumentTrainingQueryParams {
  current?: number;
  pageSize?: number;
  userName?: string;
  userPhone?: string;
}

// 培训名单分页查询参数
export interface InstrumentTrainedUserPageParams {
  ascs?: string;
  current?: number;
  descs?: string;
  instrumentId?: number;
  searchKey?: string;
  size?: number;
}

// 培训名单用户响应
export interface InstrumentTrainedUserResponse {
  id: number;
  instrumentId: number;
  userId: number;
  name: string;
  phone: string;
  status: number; // 状态 1:正常, 2:禁用
  createTime: string;
  updateTime: string;
  isDeleted: number;
}

// 添加培训名单请求
export interface InstrumentTrainedUserCreateRequest {
  instrumentId: number;
  userId: number;
}

// 删除培训名单请求
export interface InstrumentTrainedUserDeleteRequest {
  id: number;
  tmbId: number;
}


